struct f
{
    struct _
    {
    typedef _ value;
    template< class ,class=void>
    struct app_matching;          //Forward declaration

    //app es un puente eager a app_matching   
    template<class parameter>   
    struct app:app_matching< typename parameter::value > {}; 

      //cada app_matching es un caso de matching
      template< class dummy_1>
      struct app_matching< ||p_1||, dummy_1>
      {
          struct _:  ||e_1||
          {
          typedef ||e_1||::value value;
          };
      };
           ...
            .
            .
            .
           ...
      
      template< class dummy_i>
      struct app_matching< ||p_i||, dummy_i>
      {
          struct _:  ||e_i||
          {
          typedef ||e_i||::value value;
          };
      };
           ...
            .
            .
            .
           ...
            
      template< class dummy_N>
      struct app_matching< ||p_N||, dummy_N>
      {
          struct _:  ||e_N||
          {
          typedef ||e_N||::value value;
          };
      };
    };
};

